home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1995 #5 & #6 / Amiga Plus CD - 1995 - No. 5 and 6.iso / pd / netz / term / extras / source / term-source.lha / TranslationPanel.c < prev    next >
C/C++ Source or Header  |  1995-06-17  |  17KB  |  734 lines

  1. /*
  2. **    TranslationPanel.c
  3. **
  4. **    Character code translation editing panel
  5. **
  6. **    Copyright © 1990-1995 by Olaf `Olsen' Barthel
  7. **        All Rights Reserved
  8. */
  9.  
  10. #include "termGlobal.h"
  11.  
  12. enum    {    GAD_PAGE=1,GAD_USE,GAD_DEFAULT,GAD_LOAD,GAD_SAVE,GAD_CANCEL,
  13.         GAD_CHAR=700
  14.     };
  15.  
  16.     /* The character table. */
  17.  
  18. STATIC STRPTR CharCodes[256] =
  19. {
  20.     "NUL","SOH","STX","ETX","EOT","ENQ","ACK","BEL","BS" ,"HT" ,"LF" ,"VT" ,"FF" ,"CR" ,"SO" ,"SI" ,
  21.     "DLE","DC1","DC2","DC3","DC4","NAK","SYN","ETB","CAN","EM" ,"SUB","ESC","FS" ,"GS" ,"RS" ,"US" ,
  22.     "SP" , "!" , "\"", "#" , "$" , "%" , "&" , "'" , "(" , ")" , "*" , "+" , "," , "-" , "." , "/" ,
  23.      "0" , "1" , "2" , "3" , "4" , "5" , "6" , "7" , "8" , "9" , ":" , ";" , "<" , "=" , ">" , "?" ,
  24.      "@" , "A" , "B" , "C" , "D" , "E" , "F" , "G" , "H" , "I" , "J" , "K" , "L" , "M" , "N" , "O" ,
  25.      "P" , "Q" , "R" , "S" , "T" , "U" , "V" , "W" , "X" , "Y" , "Z" , "[" , "\\", "]" , "^" , "_" ,
  26.      "`" , "a" , "b" , "c" , "d" , "e" , "f" , "g" , "h" , "i" , "j" , "k" , "l" , "m" , "n" , "o" ,
  27.      "p" , "q" , "r" , "s" , "t" , "u" , "v" , "w" , "x" , "y" , "z" , "{" , "|" , "}" , "~" ,"DEL",
  28.     "128","129","130","131","132","133","134","135","136","137","138","139","140","141","SS2","SS3",
  29.     "DCS","145","146","147","148","149","150","151","152","153","154","CSI","ST" ,"OSC","PM" ,"APC",
  30.     "NBS", "¡" , "¢" , "£" , "¤" , "¥" , "¦" , "§" , "¨" , "©" , "ª" , "«" , "¬" ,"SHY", "®" , "¯" ,
  31.      "°" , "±" , "²" , "³" , "´" , "µ" , "¶" , "·" , "¸" , "¹" , "º" , "»" , "¼" , "½" , "¾" , "¿" ,
  32.      "À" , "Á" , "Â" , "Ã" , "Ä" , "Å" , "Æ" , "Ç" , "È" , "É" , "Ê" , "Ë" , "Ì" , "Í" , "Î" , "Ï" ,
  33.      "Ð" , "Ñ" , "Ò" , "Ó" , "Ô" , "Õ" , "Ö" , "×" , "Ø" , "Ù" , "Ú" , "Û" , "Ü" , "Ý" , "Þ" , "ß" ,
  34.      "à" , "á" , "â" , "ã" , "ä" , "å" , "æ" , "ç" , "è" , "é" , "ê" , "ë" , "ì" , "í" , "î" , "ï" ,
  35.      "ð" , "ñ" , "ò" , "ó" , "ô" , "õ" , "ö" , "÷" , "ø" , "ù" , "ú" , "û" , "ü" , "ý" , "þ" , "ÿ"
  36. };
  37.  
  38. STATIC BOOLEAN __regargs
  39. CodePanel(struct Window *Window,UBYTE CharCode,struct TranslationEntry **SendTable,struct TranslationEntry **ReceiveTable)
  40. {
  41.     struct LayoutHandle    *Handle;
  42.     BOOLEAN             Result = FALSE;
  43.  
  44.     if(Handle = LT_CreateHandleTags(Window -> WScreen,
  45.         LH_LocaleHook,    &LocaleHook,
  46.     TAG_DONE))
  47.     {
  48.         struct Window    *PanelWindow;
  49.         UBYTE         SendBuffer[256],
  50.                  ReceiveBuffer[256];
  51.  
  52.         if(SendTable[CharCode])
  53.             TranslateBack(SendTable[CharCode] -> String,SendTable[CharCode] -> Len,SendBuffer);
  54.         else
  55.             SendBuffer[0] = 0;
  56.  
  57.         if(ReceiveTable[CharCode])
  58.             TranslateBack(ReceiveTable[CharCode] -> String,ReceiveTable[CharCode] -> Len,ReceiveBuffer);
  59.         else
  60.             ReceiveBuffer[0] = 0;
  61.  
  62.         LT_New(Handle,
  63.             LA_Type,    VERTICAL_KIND,
  64.         TAG_DONE);
  65.         {
  66.             if(CharCodes[CharCode][0] == '1' && CharCodes[CharCode][1])
  67.                 SPrintf(SharedBuffer,LocaleString(MSG_V36_1772),CharCodes[CharCode]);
  68.             else
  69.                 SPrintf(SharedBuffer,LocaleString(MSG_V36_1773),CharCode,CharCodes[CharCode]);
  70.  
  71.             LT_New(Handle,
  72.                 LA_Type,    VERTICAL_KIND,
  73.                 LA_LabelText,    SharedBuffer,
  74.             TAG_DONE);
  75.             {
  76.                 LT_New(Handle,
  77.                     LA_Type,        STRING_KIND,
  78.                     LA_LabelID,        MSG_TRANSLATIONPANEL_SEND_CODE_AS_GAD,
  79.                     LA_STRPTR,        SendBuffer,
  80.                     LA_Chars,        30,
  81.                     STRINGA_Justification,    GACT_STRINGCENTER,
  82.                     GTST_MaxChars,        255,
  83.                 TAG_DONE);
  84.  
  85.                 LT_New(Handle,
  86.                     LA_Type,        STRING_KIND,
  87.                     LA_LabelID,        MSG_TRANSLATIONPANEL_RECEIVE_CODE_AS_GAD,
  88.                     LA_STRPTR,        ReceiveBuffer,
  89.                     STRINGA_Justification,    GACT_STRINGCENTER,
  90.                     GTST_MaxChars,        255,
  91.                 TAG_DONE);
  92.  
  93.                 LT_EndGroup(Handle);
  94.             }
  95.  
  96.             LT_New(Handle,
  97.                 LA_Type,VERTICAL_KIND,
  98.             TAG_DONE);
  99.             {
  100.                 LT_New(Handle,
  101.                     LA_Type,    XBAR_KIND,
  102.                     LAXB_FullSize,    TRUE,
  103.                 TAG_DONE);
  104.  
  105.                 LT_EndGroup(Handle);
  106.             }
  107.  
  108.             LT_New(Handle,LA_Type,HORIZONTAL_KIND,
  109.                 LAGR_SameSize,    TRUE,
  110.                 LAGR_Spread,    TRUE,
  111.             TAG_DONE);
  112.             {
  113.                 LT_New(Handle,
  114.                     LA_Type,    BUTTON_KIND,
  115.                     LA_LabelID,    MSG_GLOBAL_USE_GAD,
  116.                     LA_ID,        GAD_USE,
  117.                     LABT_ReturnKey,    TRUE,
  118.                     LABT_ExtraFat,    TRUE,
  119.                 TAG_DONE);
  120.  
  121.                 LT_New(Handle,
  122.                     LA_Type,    BUTTON_KIND,
  123.                     LA_LabelID,    MSG_GLOBAL_CANCEL_GAD,
  124.                     LA_ID,        GAD_CANCEL,
  125.                     LABT_EscKey,    TRUE,
  126.                     LABT_ExtraFat,    TRUE,
  127.                 TAG_DONE);
  128.  
  129.                 LT_EndGroup(Handle);
  130.             }
  131.  
  132.             LT_EndGroup(Handle);
  133.         }
  134.  
  135.         if(PanelWindow = LT_Layout(Handle,LocaleString(MSG_TRANSLATIONPANEL_CHARACTER_CODE_TRANSLATION_TXT),NULL,0,0,IDCMP_CLOSEWINDOW,0,
  136.             LAWN_HelpHook,        &GuideHook,
  137.             LAWN_Parent,        Window,
  138.             WA_DepthGadget,        TRUE,
  139.             WA_CloseGadget,        TRUE,
  140.             WA_DragBar,        TRUE,
  141.             WA_RMBTrap,        TRUE,
  142.             WA_Activate,        TRUE,
  143.         TAG_DONE))
  144.         {
  145.             struct IntuiMessage    *Message;
  146.             BOOLEAN             Done = FALSE;
  147.             ULONG             MsgClass,
  148.                          MsgQualifier;
  149.             UWORD             MsgCode;
  150.             struct Gadget        *MsgGadget;
  151.  
  152.             LT_ShowWindow(Handle,TRUE);
  153.  
  154.             GuideContext(CONTEXT_TRANSLATION);
  155.  
  156.             PushWindow(PanelWindow);
  157.  
  158.             do
  159.             {
  160.                 if(Wait(PORTMASK(PanelWindow -> UserPort) | SIG_BREAK) & SIG_BREAK)
  161.                     break;
  162.  
  163.                 while(Message = (struct IntuiMessage *)GT_GetIMsg(PanelWindow -> UserPort))
  164.                 {
  165.                     MsgClass    = Message -> Class;
  166.                     MsgQualifier    = Message -> Qualifier;
  167.                     MsgCode        = Message -> Code;
  168.                     MsgGadget    = (struct Gadget *)Message -> IAddress;
  169.  
  170.                     GT_ReplyIMsg(Message);
  171.  
  172.                     LT_HandleInput(Handle,MsgQualifier,&MsgClass,&MsgCode,&MsgGadget);
  173.  
  174.                     if(MsgClass == IDCMP_CLOSEWINDOW)
  175.                         Done = TRUE;
  176.  
  177.                     if(MsgClass == IDCMP_GADGETUP)
  178.                     {
  179.                         switch(MsgGadget -> GadgetID)
  180.                         {
  181.                             case GAD_USE:
  182.  
  183.                                 LT_UpdateStrings(Handle);
  184.  
  185.                                 if(SendBuffer[0])
  186.                                 {
  187.                                     struct TranslationEntry *Entry = AllocTranslationEntry(SendBuffer);
  188.  
  189.                                     if(Entry)
  190.                                     {
  191.                                         if(SendTable[CharCode])
  192.                                             FreeTranslationEntry(SendTable[CharCode]);
  193.  
  194.                                         SendTable[CharCode] = Entry;
  195.  
  196.                                         Result = TRUE;
  197.                                     }
  198.                                 }
  199.                                 else
  200.                                 {
  201.                                     if(SendTable[CharCode])
  202.                                         FreeTranslationEntry(SendTable[CharCode]);
  203.  
  204.                                     SendTable[CharCode] = NULL;
  205.  
  206.                                     Result = TRUE;
  207.                                 }
  208.  
  209.                                 if(ReceiveBuffer[0])
  210.                                 {
  211.                                     struct TranslationEntry *Entry = AllocTranslationEntry(ReceiveBuffer);
  212.  
  213.                                     if(Entry)
  214.                                     {
  215.                                         if(ReceiveTable[CharCode])
  216.                                             FreeTranslationEntry(ReceiveTable[CharCode]);
  217.  
  218.                                         ReceiveTable[CharCode] = Entry;
  219.  
  220.                                         Result = TRUE;
  221.                                     }
  222.                                 }
  223.                                 else
  224.                                 {
  225.                                     if(ReceiveTable[CharCode])
  226.                                         FreeTranslationEntry(ReceiveTable[CharCode]);
  227.  
  228.                                     ReceiveTable[CharCode] = NULL;
  229.  
  230.                                     Result = TRUE;
  231.                                 }
  232.  
  233.                                 Done = TRUE;
  234.                                 break;
  235.  
  236.                             case GAD_CANCEL:
  237.  
  238.                                 Done = TRUE;
  239.                                 break;
  240.                         }
  241.                     }
  242.                 }
  243.             }
  244.             while(!Done);
  245.  
  246.             PopWindow();
  247.         }
  248.  
  249.         LT_DeleteHandle(Handle);
  250.     }
  251.  
  252.     return(Result);
  253. }
  254.  
  255. BOOLEAN __regargs
  256. TranslationPanel(struct TranslationEntry ***SendTablePtr,struct TranslationEntry ***ReceiveTablePtr,STRPTR LastTranslation,struct Window *Parent)
  257. {
  258.     struct LayoutHandle    *Handle;
  259.     BOOLEAN             MadeChanges    = FALSE,
  260.                  Created    = FALSE;
  261.  
  262.     struct TranslationEntry    **SendTable    = *SendTablePtr,
  263.                 **ReceiveTable    = *ReceiveTablePtr;
  264.  
  265.     if(!SendTable)
  266.     {
  267.         if(!(SendTable = AllocTranslationTable()))
  268.         {
  269.             DisplayBeep(Window -> WScreen);
  270.  
  271.             return(FALSE);
  272.         }
  273.  
  274.         if(!(ReceiveTable = AllocTranslationTable()))
  275.         {
  276.             DisplayBeep(Window -> WScreen);
  277.  
  278.             FreeTranslationTable(SendTable);
  279.  
  280.             SendTable = NULL;
  281.  
  282.             return(FALSE);
  283.         }
  284.  
  285.         if(!FillTranslationTable(SendTable))
  286.         {
  287.             DisplayBeep(Window -> WScreen);
  288.  
  289.             FreeTranslationTable(SendTable);
  290.  
  291.             SendTable = NULL;
  292.  
  293.             FreeTranslationTable(ReceiveTable);
  294.  
  295.             ReceiveTable = NULL;
  296.  
  297.             return(FALSE);
  298.         }
  299.  
  300.         if(!FillTranslationTable(ReceiveTable))
  301.         {
  302.             DisplayBeep(Window -> WScreen);
  303.  
  304.             FreeTranslationTable(SendTable);
  305.  
  306.             SendTable = NULL;
  307.  
  308.             FreeTranslationTable(ReceiveTable);
  309.  
  310.             ReceiveTable = NULL;
  311.  
  312.             return(FALSE);
  313.         }
  314.  
  315.         Created = TRUE;
  316.     }
  317.  
  318.     *SendTablePtr        = SendTable;
  319.     *ReceiveTablePtr    = ReceiveTable;
  320.  
  321.     if(Handle = LT_CreateHandleTags(Window -> WScreen,
  322.         LH_LocaleHook,    &LocaleHook,
  323.     TAG_DONE))
  324.     {
  325.         struct Window    *PanelWindow;
  326.         LONG         i,Width,Max = 0;
  327.  
  328.         for(i = 0 ; i < 256 ; i++)
  329.         {
  330.             if((Width = LT_LabelChars(Handle,CharCodes[i])) > Max)
  331.                 Max = Width;
  332.         }
  333.  
  334.         LT_New(Handle,
  335.             LA_Type,    VERTICAL_KIND,
  336.         TAG_DONE);
  337.         {
  338.             LT_New(Handle,
  339.                 LA_Type,    VERTICAL_KIND,
  340.                 LA_LabelID,    MSG_V36_1774,
  341.             TAG_DONE);
  342.             {
  343.                 LT_New(Handle,
  344.                     LA_Type,    VERTICAL_KIND,
  345.                 TAG_DONE);
  346.                 {
  347.                     STATIC STRPTR Halfs[] =
  348.                     {
  349.                         "NUL-DEL",
  350.                         "128-\"ÿ\"",
  351.                         NULL
  352.                     };
  353.  
  354.                     LT_New(Handle,
  355.                         LA_Type,    CYCLE_KIND,
  356.                         LA_LabelID,    MSG_TRANSLATIONPANEL_CHARACTER_PAGE_GAD,
  357.                         LA_ID,        GAD_PAGE,
  358.                         GTCY_Labels,    Halfs,
  359.                         LA_NoKey,    TRUE,
  360.                     TAG_DONE);
  361.  
  362.                     LT_New(Handle,
  363.                         LA_Type,    XBAR_KIND,
  364.                     TAG_DONE);
  365.  
  366.                     LT_EndGroup(Handle);
  367.                 }
  368.  
  369.                 LT_New(Handle,
  370.                     LA_Type,    VERTICAL_KIND,
  371.                 TAG_DONE);
  372.                 {
  373.                     WORD i,j;
  374.  
  375.                     for(i = 0 ; i < 16 ; i++)
  376.                     {
  377.                         LT_New(Handle,
  378.                             LA_Type,    HORIZONTAL_KIND,
  379.                             LA_SameSize,    TRUE,
  380.                         TAG_DONE);
  381.                         {
  382.                             for(j = 0 ; j < 8 ; j++)
  383.                             {
  384.                                 LT_New(Handle,
  385.                                     LA_Type,    BUTTON_KIND,
  386.                                     LA_LabelText,    CharCodes[i * 8 + j],
  387.                                     LA_ID,        GAD_CHAR + i * 8 + j,
  388.                                     LA_Chars,    Max,
  389.                                     LA_NoKey,    TRUE,
  390.                                 TAG_DONE);
  391.                             }
  392.  
  393.                             LT_EndGroup(Handle);
  394.                         }
  395.                     }
  396.  
  397.                     LT_EndGroup(Handle);
  398.                 }
  399.  
  400.                 LT_EndGroup(Handle);
  401.             }
  402.  
  403.             LT_New(Handle,
  404.                 LA_Type,VERTICAL_KIND,
  405.             TAG_DONE);
  406.             {
  407.                 LT_New(Handle,
  408.                     LA_Type,    XBAR_KIND,
  409.                     LAXB_FullSize,    TRUE,
  410.                 TAG_DONE);
  411.  
  412.                 LT_EndGroup(Handle);
  413.             }
  414.  
  415.             LT_New(Handle,LA_Type,HORIZONTAL_KIND,
  416.                 LAGR_Spread,    TRUE,
  417.             TAG_DONE);
  418.             {
  419.                 LT_New(Handle,
  420.                     LA_Type,    BUTTON_KIND,
  421.                     LA_LabelID,    MSG_GLOBAL_USE_GAD,
  422.                     LA_ID,        GAD_USE,
  423.                     LA_NoKey,    TRUE,
  424.                     LABT_ExtraFat,    TRUE,
  425.                 TAG_DONE);
  426.  
  427.                 LT_New(Handle,
  428.                     LA_Type,    BUTTON_KIND,
  429.                     LA_LabelID,    MSG_GLOBAL_DEFAULT_GAD,
  430.                     LA_ID,        GAD_DEFAULT,
  431.                     LA_NoKey,    TRUE,
  432.                     LABT_ExtraFat,    TRUE,
  433.                 TAG_DONE);
  434.  
  435.                 LT_New(Handle,
  436.                     LA_Type,    BUTTON_KIND,
  437.                     LA_LabelID,    MSG_GLOBAL_LOAD_GAD,
  438.                     LA_ID,        GAD_LOAD,
  439.                     LA_NoKey,    TRUE,
  440.                     LABT_ExtraFat,    TRUE,
  441.                 TAG_DONE);
  442.  
  443.                 LT_New(Handle,
  444.                     LA_Type,    BUTTON_KIND,
  445.                     LA_LabelID,    MSG_GLOBAL_SAVE_GAD,
  446.                     LA_ID,        GAD_SAVE,
  447.                     LA_NoKey,    TRUE,
  448.                     LABT_ExtraFat,    TRUE,
  449.                 TAG_DONE);
  450.  
  451.                 LT_New(Handle,
  452.                     LA_Type,    BUTTON_KIND,
  453.                     LA_LabelID,    MSG_GLOBAL_CANCEL_GAD,
  454.                     LA_ID,        GAD_CANCEL,
  455.                     LA_NoKey,    TRUE,
  456.                     LABT_ExtraFat,    TRUE,
  457.                     LABT_EscKey,    TRUE,
  458.                 TAG_DONE);
  459.  
  460.                 LT_EndGroup(Handle);
  461.             }
  462.  
  463.             LT_EndGroup(Handle);
  464.         }
  465.  
  466.         if(PanelWindow = LT_Layout(Handle,LocaleString(MSG_TRANSLATIONPANEL_CHARACTER_TABLE_TXT),NULL,0,0,IDCMP_CLOSEWINDOW,0,
  467.             LAWN_HelpHook,        &GuideHook,
  468.             LAWN_Parent,        Parent,
  469.             WA_DepthGadget,        TRUE,
  470.             WA_CloseGadget,        TRUE,
  471.             WA_DragBar,        TRUE,
  472.             WA_RMBTrap,        TRUE,
  473.             WA_Activate,        TRUE,
  474.         TAG_DONE))
  475.         {
  476.             struct IntuiMessage    *Message;
  477.             BOOLEAN             Done = FALSE;
  478.             ULONG             MsgClass,
  479.                          MsgQualifier;
  480.             UWORD             MsgCode;
  481.             struct Gadget        *MsgGadget;
  482.             LONG             CharBase = 0,i;
  483.             UBYTE             DummyBuffer[256],
  484.                         *DummyChar;
  485.             struct FileRequester    *FileRequest;
  486.             WORD             KeyCode;
  487.  
  488.             PushWindow(PanelWindow);
  489.  
  490.             LT_ShowWindow(Handle,TRUE);
  491.  
  492.             do
  493.             {
  494.                 if(Wait(PORTMASK(PanelWindow -> UserPort) | SIG_BREAK) & SIG_BREAK)
  495.                     break;
  496.  
  497.                 while(Message = (struct IntuiMessage *)GT_GetIMsg(PanelWindow -> UserPort))
  498.                 {
  499.                     MsgClass    = Message -> Class;
  500.                     MsgQualifier    = Message -> Qualifier;
  501.                     MsgCode        = Message -> Code;
  502.                     MsgGadget    = (struct Gadget *)Message -> IAddress;
  503.  
  504.                     if(MsgClass == IDCMP_RAWKEY)
  505.                         KeyCode = LT_GetCode(MsgQualifier,MsgClass,MsgCode,MsgGadget);
  506.                     else
  507.                         KeyCode = -1;
  508.  
  509.                     GT_ReplyIMsg(Message);
  510.  
  511.                     LT_HandleInput(Handle,MsgQualifier,&MsgClass,&MsgCode,&MsgGadget);
  512.  
  513.                     if(MsgClass == IDCMP_CLOSEWINDOW)
  514.                         Done = TRUE;
  515.  
  516.                     if(KeyCode != -1 && KeyCode != '\033')
  517.                     {
  518.                         if(KeyCode >= CharBase && KeyCode < CharBase + 128)
  519.                             LT_PressButton(Handle,GAD_CHAR + KeyCode - CharBase);
  520.  
  521.                         LT_LockWindow(PanelWindow);
  522.  
  523.                         MadeChanges |= CodePanel(PanelWindow,KeyCode,SendTable,ReceiveTable);
  524.  
  525.                         LT_UnlockWindow(PanelWindow);
  526.  
  527.                         LT_ShowWindow(Handle,TRUE);
  528.                     }
  529.  
  530.                     if(MsgClass == IDCMP_GADGETUP)
  531.                     {
  532.                         switch(MsgGadget -> GadgetID)
  533.                         {
  534.                             case GAD_PAGE:
  535.  
  536.                                 LT_LockWindow(PanelWindow);
  537.  
  538.                                 if(MsgCode)
  539.                                 {
  540.                                     for(i = 0 ; i < 128 ; i++)
  541.                                         LT_SetAttributes(Handle,GAD_CHAR + i,LA_LabelText,CharCodes[128 + i],TAG_DONE);
  542.  
  543.                                     CharBase = 128;
  544.                                 }
  545.                                 else
  546.                                 {
  547.                                     for(i = 0 ; i < 128 ; i++)
  548.                                         LT_SetAttributes(Handle,GAD_CHAR + i,LA_LabelText,CharCodes[0 + i],TAG_DONE);
  549.  
  550.                                     CharBase = 0;
  551.                                 }
  552.  
  553.                                 if(!LT_Rebuild(Handle,NULL,0,0,FALSE))
  554.                                 {
  555.                                     LT_DeleteHandle(Handle);
  556.  
  557.                                     Handle = NULL;
  558.  
  559.                                     Done = TRUE;
  560.                                 }
  561.                                 else
  562.                                     LT_UnlockWindow(PanelWindow);
  563.  
  564.                                 break;
  565.  
  566.                             case GAD_DEFAULT:
  567.  
  568.                                 if(SendTable)
  569.                                 {
  570.                                     struct TranslationEntry **Table;
  571.  
  572.                                     if(Table = AllocTranslationTable())
  573.                                     {
  574.                                         if(FillTranslationTable(Table))
  575.                                         {
  576.                                             FreeTranslationTable(SendTable);
  577.  
  578.                                             SendTable = Table;
  579.                                         }
  580.                                     }
  581.                                 }
  582.  
  583.                                 if(ReceiveTable)
  584.                                 {
  585.                                     struct TranslationEntry **Table;
  586.  
  587.                                     if(Table = AllocTranslationTable())
  588.                                     {
  589.                                         if(FillTranslationTable(Table))
  590.                                         {
  591.                                             FreeTranslationTable(ReceiveTable);
  592.  
  593.                                             ReceiveTable = Table;
  594.                                         }
  595.                                     }
  596.                                 }
  597.  
  598.                                 break;
  599.  
  600.                             case GAD_USE:
  601.  
  602.                                 Done = TRUE;
  603.                                 break;
  604.  
  605.                             case GAD_CANCEL:
  606.  
  607.                                 Done = TRUE;
  608.                                 break;
  609.  
  610.                             case GAD_LOAD:
  611.  
  612.                                 strcpy(DummyBuffer,LastTranslation);
  613.  
  614.                                 DummyChar = PathPart(DummyBuffer);
  615.  
  616.                                 *DummyChar = 0;
  617.  
  618.                                 LT_LockWindow(PanelWindow);
  619.  
  620.                                 if(FileRequest = GetFile(PanelWindow,LocaleString(MSG_TRANSLATIONPANEL_LOAD_TRANSLATION_TABLES_TXT),DummyBuffer,FilePart(LastTranslation),DummyBuffer,"#?.prefs",FALSE,FALSE,FALSE,LocaleString(MSG_GLOBAL_LOAD_TXT),TRUE))
  621.                                 {
  622.                                     struct TranslationEntry **Send,**Receive = NULL;
  623.                                     BOOLEAN            Success = FALSE;
  624.  
  625.                                     if(Send = AllocTranslationTable())
  626.                                     {
  627.                                         if(Receive = AllocTranslationTable())
  628.                                             Success = LoadTranslationTables(DummyBuffer,Send,Receive);
  629.                                     }
  630.  
  631.                                     if(!Success)
  632.                                     {
  633.                                         ShowError(PanelWindow,ERR_LOAD_ERROR,IoErr(),DummyBuffer);
  634.  
  635.                                         if(Send)
  636.                                             FreeTranslationTable(Send);
  637.  
  638.                                         if(Receive)
  639.                                             FreeTranslationTable(Receive);
  640.                                     }
  641.                                     else
  642.                                     {
  643.                                         strcpy(Config -> FileConfig -> TranslationFileName,DummyBuffer);
  644.  
  645.                                         strcpy(LastTranslation,DummyBuffer);
  646.  
  647.                                         MadeChanges    = FALSE;
  648.                                         Created        = FALSE;
  649.  
  650.                                         FreeTranslationTable(SendTable);
  651.                                         FreeTranslationTable(ReceiveTable);
  652.  
  653.                                         SendTable    = Send;
  654.                                         ReceiveTable    = Receive;
  655.                                     }
  656.  
  657.                                     FreeAslRequest(FileRequest);
  658.                                 }
  659.  
  660.                                 LT_UnlockWindow(PanelWindow);
  661.                                 break;
  662.  
  663.                             case GAD_SAVE:
  664.  
  665.                                 strcpy(DummyBuffer,LastTranslation);
  666.  
  667.                                 DummyChar = PathPart(DummyBuffer);
  668.  
  669.                                 *DummyChar = 0;
  670.  
  671.                                 LT_LockWindow(PanelWindow);
  672.  
  673.                                 if(FileRequest = GetFile(PanelWindow,LocaleString(MSG_TRANSLATIONPANEL_SAVE_TRANSLATION_TABLES_TXT),DummyBuffer,FilePart(LastTranslation),DummyBuffer,"#?.prefs",TRUE,FALSE,FALSE,LocaleString(MSG_GLOBAL_SAVE_TXT),TRUE))
  674.                                 {
  675.                                     if(!SaveTranslationTables(DummyBuffer,SendTable,ReceiveTable))
  676.                                         ShowError(PanelWindow,ERR_SAVE_ERROR,IoErr(),DummyBuffer);
  677.                                     else
  678.                                     {
  679.                                         strcpy(LastTranslation,DummyBuffer);
  680.  
  681.                                         MadeChanges = FALSE;
  682.  
  683.                                         Created = FALSE;
  684.                                     }
  685.  
  686.                                     FreeAslRequest(FileRequest);
  687.                                 }
  688.  
  689.                                 LT_UnlockWindow(PanelWindow);
  690.                                 break;
  691.  
  692.                             default:
  693.  
  694.                                 if(MsgGadget -> GadgetID >= GAD_CHAR && MsgGadget -> GadgetID < GAD_CHAR + 128)
  695.                                 {
  696.                                     LT_LockWindow(PanelWindow);
  697.  
  698.                                     MadeChanges |= CodePanel(PanelWindow,CharBase + MsgGadget -> GadgetID - GAD_CHAR,SendTable,ReceiveTable);
  699.  
  700.                                     LT_UnlockWindow(PanelWindow);
  701.  
  702.                                     LT_ShowWindow(Handle,TRUE);
  703.                                 }
  704.  
  705.                                 break;
  706.                         }
  707.                     }
  708.                 }
  709.             }
  710.             while(!Done);
  711.  
  712.             PopWindow();
  713.         }
  714.  
  715.         LT_DeleteHandle(Handle);
  716.     }
  717.  
  718.     if(!MadeChanges && Created || (IsStandardTable(SendTable) && IsStandardTable(ReceiveTable)))
  719.     {
  720.         FreeTranslationTable(SendTable);
  721.  
  722.         SendTable = NULL;
  723.  
  724.         FreeTranslationTable(ReceiveTable);
  725.  
  726.         ReceiveTable = NULL;
  727.     }
  728.  
  729.     *SendTablePtr        = SendTable;
  730.     *ReceiveTablePtr    = ReceiveTable;
  731.  
  732.     return(MadeChanges);
  733. }
  734.